package cn.zzf.algs.note.base.sort;

import cn.zzf.algs.note.base.util.SortUtil;

/**
 * @author GaoFeng2017
 * @date 2020/6/17 10:39
 */
public class BubbleSort implements Sort {
    /** 冒泡排序 */
    @Override
    public void sort(Comparable[] elements) {

        // 冒泡排序，在数组未排序元素中，依次进行比较，如果前面的元素大于后面的元素，那就交换两个元素的位置，直至数组中只剩一个未排序的元素了.
        // 优化点，设置一个flag, 如果本次遍历后，元素没有被交换，那么flag的值为1， 则直接结束排序.

        boolean isNotExchange;
        for (int i = 1; i < elements.length; i++) {
            isNotExchange = true;
            for (int j = 0; j < elements.length - i; j++) {
                if (SortUtil.less(elements[j + 1], elements[j])) {
                    SortUtil.exchange(elements, j , j + 1);
                    isNotExchange = false;
                }
            }
            if (isNotExchange) {
                return;
            }
        }
    }
}
